多様なアプリケーションをインストールできるIoTカメラで遊んでみる〜パナソニックのVieureka(ビューレカ)向けアプリの開発環境構築からサンプルアプリ実行まで〜
はじめに
サーバーレス開発部@大阪の岩田です。 最近パナソニック様の提供するVieureka(ビューレカ)プラットフォームを利用したアプリケーションの開発に挑戦しています。このブログではVieurekaプラットフォームで動作するアプリケーション(AdamApp)を開発するために必要な環境構築手順についてご紹介します。
Vieurekaとは?
Vieurekaとはパナソニック様の提供するプラットフォームです。 多様なアプリケーションをインストールできるIoTカメラを用いて、さまざまな映像データを手軽に収集、分析、活用できるのが特徴です。
現時点で来客分析サービスや、従業員管理システムといったサービスが提供されており、ビジネスの課題分析・改善に役立てることが可能です。来客分析サービスを例にあげると、人物・属性カウントや滞留時間表示といった機能が利用でき、より詳細な分析・検討を行う店舗マーケティング活動に活かせます。株式会社トライアルカンパニー様の事例では売場の常時可視化により、商品陳列精度や販促効果が向上できたそうです。
来客分析サービスのダッシュボードはこんなイメージです(※画像はパナソニック様より提供頂きました)
昨年のre:Invent2018においてAWS IoT/Greengrassへの対応について発表されるなど、要注目の技術です。また、直近ですが今週の木曜日(2019/2/28)にVieurekaプラットフォームの紹介セミナーが開催されるので、興味のある方は参加してみてはいかがでしょうか?クラメソからも何名か参加させて頂きます。
今回パナソニック様のご好意によりVieureka対応カメラを貸し出して頂きました。感謝!!
このカメラでVieureka向けアプリを開発していく前準備として、まずは開発環境を構築していきます。
環境
今回利用した開発環境です。
- OS: Mac OS X 10.14.2
- Docker: 18.09.1
- docker-compose: 1.23.2
- AdamAppSDK: 0.95
開発環境の構築
それでは実際に開発環境を構築していきます。
Vieurekaプラットフォーム向けのアプリ開発にはAdamAppSDKが必要になります。
AdamAppSDKの動作要件として、サポートされているOSは
- Ubuntu 12.04LTS(32bit版、64bit版)
- Ubuntu 14.04LTS(32bit版、64bit版)
- Ubuntu 16.04LTS(64bit版のみ)
となります。今回はDockerを利用して環境を構築してみます。
AdamAppSDKとツールチェインの準備
これがないと始まりません。まずは問合せフォームからパナソニック様に問い合わせてSDKとクロスコンパイラを入手しましょう。
私が入手したバージョンはAdamAppSDK_V0_95_20170317
とvrk-c201-x86_64-toolchain-r7184-20170330.sh
でした。
Docker Imageのビルド
Ubuntu16.04のイメージをベースにDocker Imageを作成します。
まずはDockerfileです。 ARGでクロスコンパイラ導入用のシェルスクリプトを指定しています。 別バージョンを利用する場合は適宜引数を変更してください。
FROM ubuntu:16.04 ARG TOOL_CHAIN_SH=vrk-c201-x86_64-toolchain-r7184-20170330.sh COPY ./${TOOL_CHAIN_SH} ./ RUN apt-get update && \ apt-get upgrade -y && \ apt-get install -y libcurl4-nss-dev lsb gdb cron lsb-release busybox zip cmake python bzip2 g++ g++-multilib libjpeg-turbo8-dev && \ chmod +x ${TOOL_CHAIN_SH} && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* && \ ./${TOOL_CHAIN_SH} -y && \ rm -f ./${TOOL_CHAIN_SH}
docker-composeが使えるようにdocker-compose.ymlも用意しました。
ホスト側のshare
というディレクトリをコンテナの/home/ubuntu
にマウントしています。
また、後述する管理コンソールへのアクセス用にコンテナ内の80番ポートをexposeしています。
version: '3' services: devenv: image: vieureka_devenv stdin_open: true tty: true build: . volumes: - ./share:/home/ubuntu ports: - "80:80"
DockerImageをビルドします。
$ docker-compose build Building devenv Step 1/4 : FROM ubuntu:16.04 ...略 Removing intermediate container 48c32a969841 ---> 66cd06f3811c Successfully built 66cd06f3811c Successfully tagged vieureka_devenv:latest
サンプルアプリをビルドして動かしてみる
作成したDocker Imageを使ってAdamAppSDKに内包されているサンプルアプリを動かしてみます。今回はサンプルアプリの中のJpeg Sample Applicationを試してみます。 まずはDocker Imageを起動しておきます。
$ docker-compose run --service-ports devenv
サンプルアプリをビルドしてみる
コンテナ内にSDKを解凍・展開し、解凍後のディレクトリに入ります。
unzip AdamAppSDK_V0_95_20170317.zip cd AdamAppSDK_V0_95_20170317
SDKに含まれるsetup_env.sh
を実行します。
setup_env.sh
に渡す引数でビルドターゲットのアーキテクチャが指定可能です。
今回は開発環境で動作させるためにvrk-pc
を指定します。
$ source setup_env.sh vrk-pc ****** x86_64-linux-gnu-gcc is Found! ****** PF_BASEDIR = /home/ubuntu/AdamAppSDK_V0_95_20170317 BUILD_TARGET = vrk-pc TARGET_FOR_ADAM = dcs-pc TARGET_ARCH = x86_64-linux-gnu VERBOSE = 0 PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin root@fd3b30bcb88c:/home/ubuntu/AdamAppSDK_V0_95_20170317#
$ cd src/adamapp/ $ make ENTER skeleton_sample_app (ALL dcs-pc) C++ skeletonSampleApp.cpp LINK SkeletonSampleApp MAKE Package [==> Copy] MAKE Package [==> Configuration] APPLICATION --> SkeletonSampleApp APPVERSION --> V0.1 APPNAME0 --> Sample Application APPNAME1 --> サンプルアプリ ROMSIZE --> 2000 RAMSIZE --> 1000 INSTALLER --> install.sh UPDATER --> update.sh UNINSTALLER --> uninstall.sh FUNCID --> 0000FF01 APPID --> 00003100 APPID --> 00003101 APPID --> 00003102 TRIALTIME --> 44640 MODELID --> VRK_PC64_LINUX (Automatic setting) MAKE ZIP Package [==> Packing] adding: bin/SkeletonSampleApp (deflated 61%) adding: conf/profile.bin (deflated 22%) adding: conf/applicense.bin (deflated 56%) adding: data/ (stored 0%) adding: setup/ (stored 0%) adding: setup/uninstall.sh (deflated 31%) adding: setup/install.sh (deflated 40%) adding: setup/update.sh (deflated 22%) adding: conf/appConf.json (deflated 21%) MAKE EXT Package [==> Making SkeletonSampleApp_V0_1_x86_64.ext] ------ Finish! ----- LEAVE skeleton_sample_app ...略 ------ Finish! ----- LEAVE apppref_sample_app
ビルド完了です。
サンプルアプリを動かしてみる
ビルドできたのでサンプルアプリを動かしてみます。
アプリはAdamCore
と呼ばれるプロセスが管理する構成になっており、アプリの直接実行はサポートされていません。そのためアプリを実行するには管理コンソールからアプリをインストール→起動、という手順が必要になります。
まずは管理コンソールにアクセスするためbusyboxのHTTPDを起動します。
シェルスクリプトは一般ユーザーがsudo
して利用する想定の作りになっており、環境変数USER
にroot
が設定されているかをチェックしています。今回の環境はDockerコンテナを利用しており、コンテナ内ではrootユーザーを利用しているため、チェック処理を通すために環境変数を設定してきます。
またtool
内のシェルスクリプトはパスに依存する部分があるようなので、必ずシェルスクリプトを実行する際はAdamAppSDKのルートディレクトリから実行してください。
$ cd <AdamAppSdkのルートディレクトリ> $ export USER=root $ ./tool/httpdctl.sh start busybox httpd Start OK (PORT=80)
次にAdamCore
を起動します。
$ ./tool/startAdam.sh -s jpeg:<テスト用のJPEGファイルを保存したディレクトリ> *** adamCore [For x86_64-linux-gnu: ubuntu 16.04] is Starting *** sdkCam Start sdkCAM: Start to search JPEG Files! => * sdkCAM: Search finished!! adamCore Start ADAM Core 1-1-1-007110 Start : (pid=12021) ***** Start OK *****
起動時のオプション-s
で動作モードを指定できるのですが、今回は事前にテスト用のJPEGファイルを用意しておき、対象ディレクトリをjpeg:
オプションで指定しています。
このオプションを利用することでカメラデバイスが無くても画像周りの処理をテストできます。
注意点として、事前に用意するJPEGファイルのサイズは640x480にしてください。サイズが合わないと正常に動作しません。
Chrome用のExtension導入
VieurekaのカメラデバイスはADAM OPERATION UIという専用の管理UIから管理操作を行います。 ADAM OPERATION UIを利用するためのAdam Control ExtensionというChrome用ExtensionがAdamAppSdkに含まれているので、Chromeの拡張機能画面にドラッグ&ドロップしてExtensionを導入します。
ADAM OPERATION UIからサンプルアプリを実行
準備ができたのでChromeに追加されたAdam Control Extensionのアイコンをクリックし、ADAM OPERATION UIへ遷移します。
表示されたADAM OPERATION UIからTargetに開発環境のIPアドレスを入力しConnectをクリックするとカメラに接続され、カメラの管理情報が表示されます。
こちらの画面からInstallボタンをクリックし、ビルド後に生成されたZIPファイルを選択します。 しばらくするとインストールが完了し、Application ListにJpeg Sample Applicationが表示されます。
Startをクリックし、サンプルアプリを起動します。起動に成功するとStatus
がRunning
に変ります。
SendDataをクリックするとオペレーション用の画面に遷移するので、そのままsendDataをクリックし、しばらく待つと・・・
アプリからJPEGファイルが返却されてきました!! バイナリデータが返却されているため管理コンソールからは確認し辛いですが、開発者ツールでXhrのレスポンスを確認すると画像が返却されていることがわかります。
まとめ
まずは開発環境の構築手順についてご紹介しました。 今後は実際のカメラへのアプリのインストール手順や、独自アプリの開発手順についてもご紹介していきます。 お楽しみに!!